Skip to content

Comments

chore(llc): open api regeneration#1177

Open
Brazol wants to merge 3 commits intomainfrom
chore/open-api-regen-02-26
Open

chore(llc): open api regeneration#1177
Brazol wants to merge 3 commits intomainfrom
chore/open-api-regen-02-26

Conversation

@Brazol
Copy link
Contributor

@Brazol Brazol commented Feb 16, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added support for individual and raw recording types alongside composite recording.
    • Enhanced recording configuration with mode settings (disabled, available, autoOn).
    • Added moderation events for blur and warning scenarios.
    • Expanded live streaming controls with per-recording-type start/stop options.
    • New recording-specific permissions for granular access control.
  • Updates

    • Updated API models version to 219.11.0.
    • Recording APIs now support type-specific configuration.

@Brazol Brazol requested a review from a team as a code owner February 16, 2026 14:31
@coderabbitai
Copy link

coderabbitai bot commented Feb 16, 2026

📝 Walkthrough

Walkthrough

This pull request updates the OpenAPI models from version 202.0.0 to 219.11.0, introducing support for granular recording type control (individual and raw recording modes), moderation events, new call settings, and expanded recording-related configurations across the Call API and its event handling infrastructure.

Changes

Cohort / File(s) Summary
Version & Configuration
packages/stream_video/lib/globals.dart
Updated OpenAPI models version constant from '202.0.0' to '219.11.0'.
OpenAPI Model Exports
packages/stream_video/lib/open_api/video/coordinator/api.dart, packages/stream_video/lib/open_api/video/coordinator/api_client.dart
Added public exports for 9 new OpenAPI models (moderation events, recording settings/responses, feeds preferences) and updated deserialization logic in ApiClient to handle the new types.
Recording API Endpoints
packages/stream_video/lib/open_api/video/coordinator/api/productvideo_api.dart
Updated startRecording and stopRecording method signatures to accept a required recordingType parameter; modified endpoint paths to include {recording_type} placeholder.
Moderation Event Models
packages/stream_video/lib/open_api/video/coordinator/model/call_moderation_*.dart
Added two new auto-generated event classes: CallModerationBlurEvent and CallModerationWarningEvent with full JSON serialization support and collection utilities.
Recording Settings Models
packages/stream_video/lib/open_api/video/coordinator/model/individual_recording_*.dart, packages/stream_video/lib/open_api/video/coordinator/model/raw_recording_*.dart
Added 4 new auto-generated model classes for individual and raw recording settings (request/response variants) with enums, transformers, and JSON handling.
Feeds & Push Preferences
packages/stream_video/lib/open_api/video/coordinator/model/feeds_preferences_response.dart, packages/stream_video/lib/open_api/video/coordinator/model/push_preferences_response.dart
Introduced FeedsPreferencesResponse as new model; renamed PushPreferences to PushPreferencesResponse and added feedsLevel and feedsPreferences fields.
Recording Event Models
packages/stream_video/lib/open_api/video/coordinator/model/call_recording_*.dart
Extended 4 recording event classes (started, stopped, failed, ready) to include a required recordingType field with enum type and transformer logic.
Call & Session Models
packages/stream_video/lib/open_api/video/coordinator/model/call_recording.dart, packages/stream_video/lib/open_api/video/coordinator/model/call_response.dart, packages/stream_video/lib/open_api/video/coordinator/model/call_settings_*.dart, packages/stream_video/lib/open_api/video/coordinator/model/get_call_report_response.dart
Updated CallRecording with recordingType; added routingNumber to CallResponse; extended CallSettingsRequest/Response with individual/raw recording settings; added session field to GetCallReportResponse.
Go Live & Stop Live Models
packages/stream_video/lib/open_api/video/coordinator/model/go_live_request.dart, packages/stream_video/lib/open_api/video/coordinator/model/stop_live_request.dart
Added new boolean flags for composite, individual, and raw recording start/continuation control to request models.
Video Event Model
packages/stream_video/lib/open_api/video/coordinator/model/video_event.dart
Significantly expanded with 11 new fields including DTMF metadata (digit, durationMs, seqNumber, timestamp) and streaming metadata (recordingType, code, ingressStreamId, clientIp, clientName, publisherType, version).
Capabilities
packages/stream_video/lib/open_api/video/coordinator/model/own_capability.dart
Added 4 new capability constants for individual and raw recording control (startIndividualRecordCall, stopIndividualRecordCall, startRawRecordCall, stopRawRecordCall).
Event Type & Open API Event
packages/stream_video/lib/src/coordinator/open_api/event/event_type.dart, packages/stream_video/lib/src/coordinator/open_api/event/open_api_event.dart
Added callModerationBlur and callModerationWarning event type enums and extended OpenApiEvent to deserialize and handle these new event types.
Call SDK Integration
packages/stream_video/lib/src/call/call.dart
Updated call lifecycle methods (update, getOrCreate, goLive, stopLive, startRecording, stopRecording) to accept and propagate individual/raw recording settings and type-specific recording control flags.
Call Events
packages/stream_video/lib/src/call/call_events.dart
Introduced two new public event classes (StreamCallModerationBlurEvent, StreamCallModerationWarningEvent) that extend StreamCallEvent and map coordinator events to call events.
Permissions & Recording Control
packages/stream_video/lib/src/call/permissions/permissions_manager.dart
Extended startRecording and stopRecording to accept recordingType parameter (default composite) and use it for permission checks via new internal mapping helpers.
Coordinator Client
packages/stream_video/lib/src/coordinator/coordinator_client.dart, packages/stream_video/lib/src/coordinator/open_api/coordinator_client_open_api.dart, packages/stream_video/lib/src/coordinator/retry/coordinator_client_retry.dart
Updated public API across all coordinator variants to accept recordingType for recording operations and new flags for goLive/stopLive; extended with individual/raw recording settings support in updateCall.
Coordinator Models & Mappers
packages/stream_video/lib/src/coordinator/models/coordinator_events.dart, packages/stream_video/lib/src/coordinator/open_api/open_api_extensions.dart, packages/stream_video/lib/src/coordinator/open_api/open_api_mapper_extensions.dart
Added CoordinatorCallModerationBlurEvent and CoordinatorCallModerationWarningEvent classes; updated recording event classes to carry recordingType; extended CallSettings mapping to include individual/raw recording configurations.
SDK Models
packages/stream_video/lib/src/models/call_settings.dart, packages/stream_video/lib/src/models/call_permission.dart
Added RecordingType enum (composite, individual, raw), StreamIndividualRecordingSettings and StreamRawRecordingSettings classes with mode enums (available, disabled, autoOn); added 4 new CallPermission values for individual/raw recording control.
Tests
packages/stream_video/test/src/call/call_coordinator_events_test.dart
Updated recording event test instantiations to include recordingType parameter.

Sequence Diagram(s)

sequenceDiagram
    participant App as Application
    participant Call as Call SDK
    participant PermMgr as Permissions Manager
    participant Coordinator as Coordinator Client
    participant API as OpenAPI Endpoint

    App->>Call: startRecording(recordingType: RecordingType.individual)
    Call->>PermMgr: startRecording(recordingType)
    PermMgr->>PermMgr: _startRecordPermission(recordingType)
    PermMgr->>Call: Check permission (start-individual-record-call)
    Call->>Coordinator: startRecording(recordingType: individual)
    Coordinator->>API: POST /calls/{id}/recordings/individual/start
    API-->>Coordinator: Success
    Coordinator-->>Call: Result<None>
    Call-->>PermMgr: Result<None>
    PermMgr-->>App: Result<None>
Loading
sequenceDiagram
    participant App as Application
    participant Call as Call SDK
    participant EventMapper as Event Mapper
    participant CoordEvents as Coordinator Events
    participant CallEvents as Call Events

    API->>EventMapper: Receive call.moderation_blur event
    EventMapper->>EventMapper: Parse callModerationBlur field
    EventMapper->>CoordEvents: Create CoordinatorCallModerationBlurEvent
    CoordEvents->>EventMapper: Return CoordEvent instance
    EventMapper->>CallEvents: Map to StreamCallModerationBlurEvent
    CallEvents->>Call: Emit event to subscribers
    Call->>App: Notify listeners of moderation action
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Rationale: This diff is heterogeneous with significant scope spanning auto-generated OpenAPI models (~10+ new classes), extended existing OpenAPI models with new enum types and transformers, and substantial SDK-level changes across call management, event handling, permissions, and coordinator integration. While many changes follow repetitive patterns (e.g., adding fields to models), the diversity of change types (new enums, transformers, recording type pipelines, permission mappings, event routing) and the interconnected nature of recording-type propagation across multiple layers demand careful reasoning about consistency, backward compatibility, and correct enum/type conversions.

Poem

🐰 With whiskers twitching, we hop through the streams,
Individual recordings now fulfill our dreams!
Moderation events blur the unwanted sight,
While granular control keeps recordings just right.
From composite to raw, each type finds its way,
The stream flows more gently with types in their place today! 🎬✨

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description is completely empty. The template requires multiple sections including Goal, Implementation details, Testing, and a Contributor Checklist. Add a comprehensive description explaining why OpenAPI regeneration was needed, what changed, and any relevant testing or notes for reviewers.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore(llc): open api regeneration' accurately describes the main change - regenerating OpenAPI code. It is concise, specific, and follows conventional commit format.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Merge Conflict Detection ✅ Passed ✅ No merge conflicts detected when merging into main

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/open-api-regen-02-26

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/stream_video/lib/src/coordinator/retry/coordinator_client_retry.dart (1)

738-782: ⚠️ Potential issue | 🟠 Major

Add missing broadcasting parameter to delegate call in updateCall.

The updateCall method accepts a broadcasting parameter (line 751) but fails to forward it to _delegate.updateCall(...). This is a pre-existing bug in the retry wrapper—since you're already modifying this method to add individualRecording and rawRecording, fix this omission as well.

Proposed fix
       () => _delegate.updateCall(
         callCid: callCid,
         custom: custom,
         startsAt: startsAt,
         ring: ring,
         audio: audio,
         video: video,
         screenShare: screenShare,
         recording: recording,
         transcription: transcription,
         backstage: backstage,
         geofencing: geofencing,
         limits: limits,
+        broadcasting: broadcasting,
         session: session,
         frameRecording: frameRecording,
         individualRecording: individualRecording,
         rawRecording: rawRecording,
         ingress: ingress,
       ),
🧹 Nitpick comments (3)
packages/stream_video/lib/src/coordinator/coordinator_client.dart (1)

255-266: Add documentation clarifying the relationship between startRecording and the granular recording type flags in goLive.

The goLive method signature now includes both startRecording and granular recording type flags (startCompositeRecording, startIndividualRecording, startRawRecording), but lacks explanation of their purpose and interaction. A doc comment should clarify whether startRecording is a legacy parameter, a convenience flag, or serves a distinct purpose compared to the granular options.

packages/stream_video/test/src/call/call_coordinator_events_test.dart (1)

685-685: Tests only cover RecordingType.composite.

Consider adding test cases for RecordingType.individual and RecordingType.raw to ensure recording state transitions work correctly for all recording types.

Also applies to: 705-705, 716-716, 736-736, 747-747

packages/stream_video/lib/src/models/call_settings.dart (1)

43-44: CallSettings.props does not include the new fields (nor most existing ones).

props only lists [audio, video, screenShare], omitting individualRecording, rawRecording, and many other fields. This means Equatable equality checks and hashCode won't account for these settings. This is a pre-existing issue, but worth noting since you're adding more fields that are excluded.

♻️ Suggested fix
   `@override`
-  List<Object?> get props => [audio, video, screenShare];
+  List<Object?> get props => [
+    ring,
+    audio,
+    video,
+    screenShare,
+    recording,
+    broadcasting,
+    transcription,
+    backstage,
+    geofencing,
+    limits,
+    session,
+    frameRecording,
+    individualRecording,
+    rawRecording,
+    ingress,
+  ];

@codecov
Copy link

codecov bot commented Feb 16, 2026

Codecov Report

❌ Patch coverage is 2.03459% with 963 lines in your changes missing coverage. Please review.
✅ Project coverage is 6.38%. Comparing base (d3ad830) to head (7f44a4a).

Files with missing lines Patch % Lines
.../coordinator/model/feeds_preferences_response.dart 0.00% 75 Missing ⚠️
.../open_api/video/coordinator/model/video_event.dart 2.66% 73 Missing ⚠️
...ordinator/model/call_moderation_warning_event.dart 0.00% 64 Missing ⚠️
.../model/individual_recording_settings_response.dart 3.03% 64 Missing ⚠️
...r/model/individual_recording_settings_request.dart 3.12% 62 Missing ⚠️
...rdinator/model/raw_recording_settings_request.dart 3.12% 62 Missing ⚠️
...dinator/model/raw_recording_settings_response.dart 3.12% 62 Missing ⚠️
.../coordinator/model/call_moderation_blur_event.dart 0.00% 60 Missing ⚠️
...ordinator/model/individual_recording_response.dart 0.00% 43 Missing ⚠️
...ges/stream_video/lib/src/models/call_settings.dart 4.54% 42 Missing ⚠️
... and 25 more
Additional details and impacted files
@@           Coverage Diff            @@
##            main   #1177      +/-   ##
========================================
- Coverage   6.47%   6.38%   -0.10%     
========================================
  Files        601     609       +8     
  Lines      42031   42965     +934     
========================================
+ Hits        2723    2743      +20     
- Misses     39308   40222     +914     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant